home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_SCARS.ZIP / SCARS.txt < prev    next >
Encoding:
Text File  |  1999-05-13  |  10.0 KB  |  231 lines

  1.  
  2. Free Information Xchange presents:
  3.  
  4. S.C.A.R.S. - CD crack by Static Vengeance - Dec 23th, 1998
  5.  
  6. Requirements:
  7. hex editor and full install
  8. W32Dasm if you want to follow along
  9.  
  10.     S.C.A.R.S. is another racer by Ubi Soft based on the pod 3D race engine.  Although this one
  11. seems to be aimed at younger kids judging by the car designs.  As such here is a good example of why
  12. you need to FiX the program bug known as a CD check.  If jr. is going to inserting the CD there's no
  13. telling how careful he'll be or where he'll leave the CD when he's done with it.  Why risk loosing a
  14. game CD over a stupid little thing like a CD check when it can be removed!
  15.     When trying to run the game without the CD in the drive you'll see that a standard windows
  16. pop-up dialog box appears and tells you there's no scars cd in the drive.  That's a good as place
  17. as any to start our cracking adventure.  So load up W32Dasm and disassemble the version you'll want
  18. to crack (in this example it's the 3Dfx version) like ScarsFX.exe.  Once W32Dasm has finished you'll
  19. want to go up to the menu bar and select Refs and then string data references from the drop down menu.
  20. From there, when the pop-up box appears, grab the slider bar and scroll down to "No Scars CD In Drive"
  21. and simply double click.  Check out the info...  Well ok, not exactly what we're looking for so go
  22. back and double click the string ref again and you should see something like this:
  23.  
  24.  
  25.   -- Program code --
  26. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  27. |:004010AA(U)                                                         <-- Got here via a jump
  28. |
  29. :0040A7C0 56                      push esi
  30.  
  31. * Possible StringData Ref from Data Obj ->"..\..\scars\data\sndxtr."  <-- Check for this file
  32.                                   |
  33. :0040A7C1 6884F84900              push 0049F884
  34. :0040A7C6 E8F66AFFFF              call 004012C1
  35. :0040A7CB 83C404                  add esp, 00000004
  36. :0040A7CE 85C0                    test eax, eax
  37. :0040A7D0 741C                    je 0040A7EE                         <-- Didn't find the file jump down
  38. :0040A7D2 A1AC324F00              mov eax, dword ptr [004F32AC]
  39. :0040A7D7 6A10                    push 00000010
  40.  
  41. * Possible StringData Ref from Data Obj ->"Scars Error"
  42.                                   |
  43. :0040A7D9 6874F84900              push 0049F874
  44.  
  45. * Possible StringData Ref from Data Obj ->"Scars Install Error"
  46.                                   |
  47. :0040A7DE 6844F84900              push 0049F844
  48. :0040A7E3 50                      push eax
  49.  
  50. * Reference To: USER32.MessageBoxA, Ord:0195h
  51.                                   |
  52. :0040A7E4 FF15589A7501            Call dword ptr [01759A58]
  53. :0040A7EA 32C0                    xor al, al                           <-- Set up for failed check
  54. :0040A7EC 5E                      pop esi
  55. :0040A7ED C3                      ret
  56.  
  57. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  58. |:0040A7D0(C)
  59. |
  60. :0040A7EE 6800800000              push 00008000
  61. :0040A7F3 6810394F00              push 004F3910
  62. :0040A7F8 E8D3600600              call 004708D0
  63. :0040A7FD 8BF0                    mov esi, eax
  64. :0040A7FF 83C408                  add esp, 00000008
  65. :0040A802 83FEFF                  cmp esi, FFFFFFFF
  66. :0040A805 751D                    jne 0040A824
  67. :0040A807 8B0DAC324F00            mov ecx, dword ptr [004F32AC]
  68. :0040A80D 6A10                    push 00000010
  69.  
  70. * Possible StringData Ref from Data Obj ->"Scars Error"
  71.                                   |
  72. :0040A80F 6874F84900              push 0049F874
  73.  
  74. * Possible StringData Ref from Data Obj ->"No Scars CD In Drive"  <-- How & why we got here
  75.                                   |
  76. :0040A814 6828F84900              push 0049F828
  77. :0040A819 51                      push ecx
  78.  
  79. * Reference To: USER32.MessageBoxA, Ord:0195h
  80.                                   |
  81. :0040A81A FF15589A7501            Call dword ptr [01759A58]
  82. :0040A820 32C0                    xor al, al                      <-- Set up for a failed CD check
  83. :0040A822 5E                      pop esi
  84. :0040A823 C3                      ret
  85.  
  86. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  87. |:0040A805(C)
  88. |
  89. :0040A824 56                      push esi
  90. :0040A825 E876D70600              call 00477FA0
  91. :0040A82A 83C404                  add esp, 00000004
  92. :0040A82D 56                      push esi
  93. :0040A82E E85D200600              call 0046C890
  94. :0040A833 83C404                  add esp, 00000004
  95. :0040A836 B001                    mov al, 01                      <-- Set up for passed CD check
  96. :0040A838 5E                      pop esi
  97. :0040A839 C3                      ret
  98.  
  99.     That was short and simple to follow.  You'll see if things go "bad" (no CD found) al is loaded
  100. with zero.  However, if everything is peachy then al gets loaded with 01 at 40A836.  So if you go back
  101. and look at the caller @ 4010AA you'll see it's part of huge jump table.  A jump table being a list of
  102. jumps to sections of the game with calls or other indirect jumps through the table.  We're lucky here
  103. as you'll see the jump we want to kill is referenced by a simple call instruction.  Part of the jump
  104. table follows:
  105.  
  106.   -- Small section of a large jump table --
  107. * Referenced by a CALL at Address:
  108. |:0040CBFF   
  109. |
  110. :004010A0 E99B5F0000              jmp 00407040
  111. :004010A5 E986B10000              jmp 0040C230
  112.  
  113. * Referenced by a CALL at Address:
  114. |:0040D0B9                                             <-- Called just once   
  115. |
  116. :004010AA E911970000              jmp 0040A7C0         <-- Jump to CD check
  117. :004010AF E97C440000              jmp 00405530
  118.  
  119. * Referenced by a CALL at Addresses:
  120. |:0044F72E   , :0044F826   
  121. |
  122. :004010B4 E9A7DB0000              jmp 0040EC60
  123.  
  124. * Referenced by a CALL at Address:
  125. |:00406C0A   
  126. |
  127. :004010B9 E932590000              jmp 004069F0
  128. :004010BE E96D990000              jmp 0040AA30
  129.   -- The rest of the jump table --
  130.  
  131.     Alright, now it's just a matter of checking out the code surounding the caller (40D0B9) and
  132. see what it does and how we'll deal with it.  So go to 40D0B9 and back up a couple of lines to see
  133. what we have:
  134.  
  135.   -- Program code --
  136. :0040D0B0 6A61                    push 00000061
  137. :0040D0B2 FFD5                    call ebp
  138. :0040D0B4 E81341FFFF              call 004011CC
  139. :0040D0B9 E8EC3FFFFF              call 004010AA          <-- Call jump to CD check
  140. :0040D0BE 84C0                    test al, al            <-- Pass/fail value returned in al
  141. :0040D0C0 750D                    jne 0040D0CF           <-- Anything but zero means passed
  142. :0040D0C2 83C8FF                  or eax, FFFFFFFF
  143. :0040D0C5 5F                      pop edi
  144. :0040D0C6 5E                      pop esi
  145. :0040D0C7 5D                      pop ebp
  146. :0040D0C8 5B                      pop ebx
  147. :0040D0C9 83C448                  add esp, 00000048
  148. :0040D0CC C21000                  ret 0010               <-- Getting here quits the game
  149.  
  150. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  151. |:0040D0C0(C)                                                        <-- Need to get here to play the game
  152. |
  153. * Reference To: KERNEL32.InitializeCriticalSection, Ord:0179h        <-- Continue loading and move on
  154.                                   |
  155. :0040D0CF 8B3538987501            mov esi, dword ptr [01759838]
  156. :0040D0D5 6890324F00              push 004F3290
  157. :0040D0DA FFD6                    call esi
  158. :0040D0DC 68D8344F00              push 004F34D8
  159. :0040D0E1 FFD6                    call esi
  160. :0040D0E3 6848324F00              push 004F3248
  161. :0040D0E8 FFD6                    call esi
  162. :0040D0EA 68007F0000              push 00007F00
  163. :0040D0EF 57                      push edi
  164. :0040D0F0 893DCC753401            mov dword ptr [013475CC], edi
  165.  
  166. * Reference To: USER32.LoadCursorA, Ord:0172h
  167.                                   |
  168. :0040D0F6 FF15A09A7501            Call dword ptr [01759AA0]
  169. :0040D0FC 6A66                    push 00000066
  170. :0040D0FE 8B742460                mov esi, dword ptr [esp+60]
  171. :0040D102 8944244C                mov dword ptr [esp+4C], eax
  172.   -- Continuing program code --
  173.  
  174.     No problem here, just change the call to the jump table to mov eax, 00000001 and you have a
  175. cracked version of the game.  Although the game only checks al which is the lowest 8 bits of eax the
  176. jne will pass.  The reason being the CPU sees the 01 as being the value in al, ax or eax.  As you
  177. know eax is "extended ax" and is 32 bits wide, ax is 16 bits and al (ax lower) is only 8 bits wide.
  178.     BTW: Although not needed you can copy the AVI files to the "/Data" subdirectory from the CD
  179. and the game will find and use them.  If not, the game will just continue as though they have already
  180. been played.  There you have it, and now the simple way:
  181.  
  182. 1.  Install the game (only one type of install allowed)
  183. 2.  Make the following edits by version:
  184.  
  185. For the 3Dfx version edit ScarsFX.exe
  186. ============================================
  187. Search for: E8 EC 3F FF FF  at offset 50,361
  188. Change to : B8 01 00 00 00
  189.  
  190. Search for: 74 1E           at offset 39,767
  191. Change to : EB 37
  192.  
  193. For the Direct3D version edit ScarsD3D.exe
  194. ============================================
  195. Search for: E8 20 5C FF FF  at offset 43,161
  196. Change to : B8 01 00 00 00
  197.  
  198. Search for: 74 1E           at offset 32,967
  199. Change to : EB 37
  200.  
  201. For the updated internet released patch:
  202.  
  203. For the 3Dfx version edit ScarsFX.exe
  204. ============================================
  205. Search for: E8 6B 3E FF FF  at offset 54,058
  206. Change to : B8 01 00 00 00
  207.  
  208. Search for: 74 1E           at offset 43,015
  209. Change to : EB 37
  210.  
  211. Search for: 74 1C           at offset 43,264
  212. Change to : EB 52
  213.  
  214. For the Direct3D version edit ScarsD3D.exe
  215. ============================================
  216. Search for: E8 1C 58 FF FF  at offset 47,498
  217. Change to : B8 01 00 00 00
  218.  
  219. Search for: 74 1E           at offset 36,823
  220. Change to : EB 37
  221.  
  222. Search for: 74 1C           at offset 37,072
  223. Change to : EB 52
  224.  
  225. 3.  Option: Copy all the AVI files from the CD into "\Data"
  226. 4.  Enjoy the newly cracked version of S.C.A.R.S.
  227.  
  228.     Yet another copy protection has fallen, because we FiX'ed this one.
  229.  
  230. Static Vengeance
  231.